#ifndef __PI_TEST_H__
#define __PI_TEST_H__
#include <stdint.h>
#include <limits.h>
#include "thread_ctrl.h"

#define PI_ITEM_NAME            "PI"
#define PI_ITEM_NUM             (1 + 1)
#define PI_ARGV_OFFSET          2
#define PI_DRV_NAME             "pcie_pi"
#define PI_MAX_CHANNEL          32

enum pi_edge {
    PI_EDGE_RISE        = 0,                /* 上升沿 */
    PI_EDGE_FALL        = 1,                /* 下降沿 */
    PI_EDGE_RISE_FALL   = 2,                /* 上升和下降沿 */
};

/* PI 设备 */
struct pi_dev_t {
    void *parent;                           /* 父指针 */
    char name[32];                          /* 设备名 */
    uint8_t index;                          /* 索引号 */

    uint8_t edge;                           /* 边沿 */
    uint16_t delay;                         /* 延时时间, us */
    uint64_t freq;                          /* 频率值 */

    char path[PATH_MAX];                    /* 路径 */
    int fd;                                 /* 文件 */
    struct thread_param_t *read_thread;     /* 接收线程 */
};

/* PI 信息 */
struct pi_param_t {
    void *parent;                           /* 父指针 */
    char name[32];                          /* 设备名 */
    uint8_t dev_id;                         /* 设备索引号 */
    uint8_t dev_num;                        /* 设备数量 */
    uint8_t max_num;                        /* 最大数量 */
    uint8_t type;                           /* 模块类型 */

    struct pi_dev_t *dev;                    /* PI 设备 */

    uint8_t item_id;                        /* 测试项目号 */
    uint8_t en_read;                        /* 使能接收 */
    int read_cnt;                           /* 接收数量 */
};

struct pi_item_t {
    struct thread_info_t *thread;
    struct pi_param_t *param;
};

int pi_test(int argc, char *argv[]);

#endif /* __PI_TEST_H__ */
